package com.foodorder.entity;

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 配送员实体类
 */
@Data
@Entity
@Table(name = "delivery_staff")
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DeliveryStaff {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    /**
     * 姓名
     */
    @Column(nullable = false, length = 50)
    private String name;

    /**
     * 手机号
     */
    @Column(nullable = false, length = 20)
    private String phone;

    /**
     * 密码（加密存储）
     */
    @Column(nullable = false, length = 100)
    private String password;

    /**
     * 头像URL
     */
    @Column(length = 255)
    private String avatar;

    /**
     * 性别
     */
    @Enumerated(EnumType.STRING)
    private Gender gender;

    /**
     * 身份证号
     */
    @Column(length = 18)
    private String idNumber;

    /**
     * 工号
     */
    @Column(length = 20)
    private String staffNo;

    /**
     * 所属门店ID
     */
    private Long storeId;

    /**
     * 配送员状态
     */
    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private DeliveryStaffStatus status = DeliveryStaffStatus.ACTIVE;

    /**
     * 当前位置纬度
     */
    private BigDecimal currentLatitude;

    /**
     * 当前位置经度
     */
    private BigDecimal currentLongitude;

    /**
     * 最后位置更新时间
     */
    private LocalDateTime lastLocationUpdateTime;

    /**
     * 最后登录时间
     */
    private LocalDateTime lastLoginTime;

    /**
     * 当前接单状态
     */
    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private WorkingStatus workingStatus = WorkingStatus.OFFLINE;

    /**
     * 累计完成订单数
     */
    private Integer completedOrderCount = 0;

    /**
     * 健康证URL
     */
    @Column(length = 255)
    private String healthCertificateUrl;

    /**
     * 健康证到期日期
     */
    private LocalDateTime healthCertificateExpiry;

    /**
     * 创建时间
     */
    @CreationTimestamp
    @Column(nullable = false, updatable = false)
    private LocalDateTime createdAt;

    /**
     * 更新时间
     */
    @UpdateTimestamp
    @Column(nullable = false)
    private LocalDateTime updatedAt;

    /**
     * 性别枚举
     */
    public enum Gender {
        /**
         * 男
         */
        MALE,
        
        /**
         * 女
         */
        FEMALE,
        
        /**
         * 其他
         */
        OTHER
    }

    /**
     * 配送员状态枚举
     */
    public enum DeliveryStaffStatus {
        /**
         * 活跃
         */
        ACTIVE,
        
        /**
         * 锁定
         */
        LOCKED,
        
        /**
         * 禁用
         */
        DISABLED
    }

    /**
     * 工作状态枚举
     */
    public enum WorkingStatus {
        /**
         * 离线
         */
        OFFLINE,
        
        /**
         * 在线（可接单）
         */
        ONLINE,
        
        /**
         * 配送中
         */
        DELIVERING,
        
        /**
         * 暂停接单
         */
        PAUSED
    }
} 